<?php
/**
 * 
 */

/**
 * 
 */
abstract class Lite_Loader_AbstractLoader implements Lite_Loader_AutoLoader { 
	
	/**
	 * Carga el archivo para la clase <code>$name</code>
	 * 
	 * @param string $name Nombre de la clase a cargar 
	 */
	final function autoload($name){
		
		# delegamos la busqueda de la ruta
		$file = $this->getFilePath($name);
		
		if( !is_file( $file )) {
			return false;
		}
		
		include $file;
		
		if( !class_exists($name, false) && !interface_exists($name, false)) {
			throw new RuntimeException(
				"{$file} does not contains {$name} definition, but it was included"
		  	);
		}
		
		return true;
	}
	
	/**
	 * Devuelve la direccion fisica del archivo para la clase o interfaz <code>$name</code>
	 * 
	 * @param string $name Nombre de la clase o interfaz
	 * 
	 * @return string Ruta fisica al archivo o null en caso contrario
	 */
	abstract function getFilePath($name);
}
	